package com.unju.hibernate.patronDAO.imp;

import java.util.List;

import org.apache.log4j.Logger;
import org.hibernate.Criteria;
import org.hibernate.criterion.Restrictions;

import com.unju.hibernate.HibernateBase;
import com.unju.hibernate.entidades.Clasificacion;
import com.unju.hibernate.patronDAO.PatronDAO;

public class ClasificacionDAOImp extends HibernateBase implements
		PatronDAO<Clasificacion> {

	final static Logger logger = Logger.getLogger(ClasificacionDAOImp.class);
	/**
	 * @return lista de clasificaciones disponibles en la base de datos
	 */
	@Override
	public List<Clasificacion> getAll() {
		getSession().beginTransaction();
		List<Clasificacion> lista = getSession().createCriteria(Clasificacion.class).list();
		getSession().getTransaction().commit();
		getSession().close();
		return lista;
	}

	@Override
	public Clasificacion get(Integer idDato) {
		getSession().beginTransaction();
		Clasificacion respons = (Clasificacion) getSession().get(
				Clasificacion.class, idDato);
		getSession().getTransaction().commit();
		getSession().close();
		return respons;
	}

	@Override
	public void insert(Clasificacion clasificacion) {
		getSession().beginTransaction();
		logger.info("clasificacion: "+clasificacion.getNombre());
		logger.info(clasificacion.getClass());
		getSession().save(clasificacion);
		
		getSession().getTransaction().commit();
		getSession().close();
	}

	@Override
	public void update(Clasificacion unDato) {
		getSession().beginTransaction();
		getSession().update(unDato);
		getSession().getTransaction().commit();
		getSession().close();
	}

	@Override
	public void delete(Clasificacion unDato) {
		getSession().beginTransaction();
		getSession().delete(unDato);
		getSession().getTransaction().commit();
		getSession().close();
	}

	public Clasificacion getClasificacion(String nombre) {
		Clasificacion clasificacion = null;
		getSession().beginTransaction();
		Criteria criteria = getSession().createCriteria(Clasificacion.class);
		criteria.add(Restrictions.eq("nombre", nombre));
		if (criteria.list().size() > 0)
			clasificacion = (Clasificacion) criteria.list().get(0);
		getSession().close();
		return clasificacion;
	}
}
